import { defineStore } from 'pinia'
import { getChatSessionListApi } from '@/api/chat.js'

export const useSessionStore = defineStore('session', {
  state: () => ({
    // 会话列表
    sessionList: [],
    // 最后更新时间
    lastUpdateTime: null
  }),

  getters: {
    // 根据会话ID获取会话
    getSessionById: (state) => (sessionId) => {
      return state.sessionList.find(session => session.id === sessionId)
    },
    
    // 获取会话数量
    sessionCount: (state) => state.sessionList.length
  },

  actions: {
    // 从服务器获取会话列表
    async fetchSessionList() {
      try {
        console.log("开始获取会话列表...");
        const data = await getChatSessionListApi();
        console.log("获取到的会话列表:", data);
        
        if (data && Array.isArray(data)) {
          // 合并会话列表（增量更新）
          this.mergeSessionList(data);
          this.lastUpdateTime = Date.now();
        }
        
        return data;
      } catch (error) {
        console.error("获取会话列表失败:", error);
        throw error;
      }
    },

    // 合并会话列表（增量更新）
    mergeSessionList(newSessions) {
      if (!Array.isArray(newSessions)) return;
      
      newSessions.forEach(newSession => {
        const existingIndex = this.sessionList.findIndex(
          session => session.id === newSession.id
        );
        
        if (existingIndex !== -1) {
          // 更新现有会话
          this.sessionList[existingIndex] = {
            ...this.sessionList[existingIndex],
            ...newSession
          };
        } else {
          // 新增会话
          this.sessionList.push(newSession);
        }
      });
      
      // 按最后消息时间排序（最新的在前）
      this.sortSessionList();
      
      console.log("合并后的会话列表:", this.sessionList);
    },

    // 添加或更新单个会话
    upsertSession(session) {
      if (!session || !session.id) return;
      
      const existingIndex = this.sessionList.findIndex(
        s => s.id === session.id
      );
      
      if (existingIndex !== -1) {
        // 更新现有会话
        this.sessionList[existingIndex] = {
          ...this.sessionList[existingIndex],
          ...session
        };
      } else {
        // 新增会话
        this.sessionList.unshift(session);
      }
      
      // 排序
      this.sortSessionList();
      
      console.log("会话已更新:", session.id);
    },

    // 删除会话
    removeSession(sessionId) {
      const index = this.sessionList.findIndex(s => s.id === sessionId);
      if (index !== -1) {
        this.sessionList.splice(index, 1);
        console.log("会话已删除:", sessionId);
      }
    },

    // 更新会话的未读消息数
    updateUnreadCount(sessionId, count) {
      const session = this.sessionList.find(s => s.id === sessionId);
      if (session && session.otherUserInfo) {
        session.otherUserInfo.unreadMsgCount = count;
      }
    },

    // 更新会话的最后消息
    updateLastMessage(sessionId, message, time) {
      const session = this.sessionList.find(s => s.id === sessionId);
      if (session) {
        session.lastMessage = message;
        session.lastMsgTime = time || Date.now();
        
        // 重新排序
        this.sortSessionList();
      }
    },

    // 清空未读消息数
    clearUnreadCount(sessionId) {
      this.updateUnreadCount(sessionId, 0);
    },

    // 排序会话列表（按最后消息时间降序）
    sortSessionList() {
      this.sessionList.sort((a, b) => {
        const timeA = a.lastMsgTime ? new Date(a.lastMsgTime).getTime() : 0;
        const timeB = b.lastMsgTime ? new Date(b.lastMsgTime).getTime() : 0;
        return timeB - timeA;
      });
    },

    // 清空会话列表
    clearSessionList() {
      this.sessionList = [];
      this.lastUpdateTime = null;
      console.log("会话列表已清空");
    }
  },

  // 开启持久化
  persist: true
})


